package creation_patterns.singleton_pattern.inner;

import java.util.Objects;

/**
 *
 * 内部类，只要没有被使用，就不会初始化，Singleton的实例就不会创建
 * 在第一次有人调用getInstance方法的时候，内部类会初始化，创建一个Singleton的实例
 * 类静态初始化的过程一定只会执行一次
 *
 */
public class InnerClassSingleton {
    private static class SingletonHolder{
        private static InnerClassSingleton innerClassSingleton = new InnerClassSingleton();
    }
    private InnerClassSingleton(){
        // 通过java反射获取无参构造可以创建对象，破坏了统一入口，加入该方法可以防止暴力反射创建对象
        if(!Objects.isNull(SingletonHolder.innerClassSingleton)){
            throw new RuntimeException("非法创建对象异常");
        }
    }
    private static InnerClassSingleton getInstance(){
        return SingletonHolder.innerClassSingleton;
    }
}

